/**
 * TimeUtil.java
 */
package com.ozq.common.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * <时间工具> <功能详细描述>
 * 
 * @author 欧增奇
 * @version [版本号, 2016年9月6日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class TimeUtils
{
    static Logger logger = LoggerFactory.getLogger(TimeUtils.class);

    /**
     * 返回当前时间对象，默认格式 ：yyyy-MM-dd HH:mm:ss
     * 
     * @return Date对象
     */
    public static Date toTime()
    {
        return toTime("yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 返回当前时间对象
     * 
     * @param format
     *            格式化
     * @return Date对象，当失败返回null
     */
    public static Date toTime(String format)
    {
        try
        {
            return new SimpleDateFormat(format).parse(toStringTime(format));
        } catch (ParseException e)
        {
            logger.error("时间转换错误,toTime -> e:{}", e);
        }
        return null;
    }

    /**
     * 返回当前时间字符串，默认格式 ：yyyy-MM-dd HH:mm:ss
     * 
     * @return 时间字符串
     */
    public static String toStringTime()
    {
        return toStringTime("yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 返回当前时间字符串
     * 
     * @param format
     *            格式化
     * @return 时间字符串
     */
    public static String toStringTime(String format)
    {
        return new SimpleDateFormat(format).format(new Date());
    }

    /**
     * 格式化时间 Date -> Date
     * 
     * @param date
     *            时间对象
     * @param format
     *            格式化
     * @return Date对象，当失败返回原来Date对象
     */
    public static Date toTime(Date date, String format)
    {
        try
        {
            SimpleDateFormat obj_format = new SimpleDateFormat(format);
            return obj_format.parse(obj_format.format(date));
        } catch (ParseException e)
        {
            logger.error("格式化时间 Date -> Date,toTime -> e:{}", e);
        }
        return date;
    }

    /**
     * 格式化时间 date -> String
     * 
     * @param date
     *            时间对象
     * @param format
     *            格式化
     * @return 返回时间字符串
     */
    public static String toStringTime(Date date, String format)
    {
        return new SimpleDateFormat(format).format(date);
    }

    /**
     * 格式化时间 dateString -> String
     * 
     * @param dateString
     *            时间字符串
     * @param format
     *            格式化
     * @return 返回时间字符串，当失败返回null
     */
    public static String toStringTime(String dateString, String format)
    {
        try
        {
            if (StringUtils.isEmpty(dateString))
            {
                return null;
            }
            Date date = null;
            if (dateString.length() >= 22)
            {
                SimpleDateFormat sdf2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", java.util.Locale.ENGLISH);
                date = sdf2.parse(dateString);
                return toStringTime(date, format);
            } else
            {
                date = toTime(dateString, format);
            }
            return toStringTime(date, format);
        } catch (Exception e)
        {
            logger.error("格式化时间 date -> Date,toStringTime -> e:{}", e);
        }
        return null;
    }

    /**
     * 格式化时间 dateString -> Date
     * 
     * @param dateString
     *            时间字符串
     * @param format
     *            格式化
     * @return Date对象，当失败返回null
     */
    public static Date toTime(String dateString, String format)
    {
        try
        {
            return new SimpleDateFormat(format).parse(dateString);
        } catch (ParseException e)
        {
            logger.error("格式化时间 dateString -> Date,toTime -> e:{}", e);
        }
        return null;
    }
}
